// ItemManagementFragment.java
package com.xxxy.ljh.myapplication.activity.Fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.xxxy.ljh.myapplication.Adapter.ItemAdapter;
import com.xxxy.ljh.myapplication.Dao.ItemDao;
import com.xxxy.ljh.myapplication.DaoImpl.ItemDaoImpl;
import com.xxxy.ljh.myapplication.R;
import com.xxxy.ljh.myapplication.model.Item;
import java.util.ArrayList;
import java.util.List;

/**
 * 物品管理界面 Fragment，用于展示和新增物品信息。
 * 包含一个 RecyclerView 显示物品列表，以及一组输入控件用于添加新的物品。
 */
public class ItemManagementFragment extends Fragment {

    private RecyclerView recyclerViewItems;
    private ItemAdapter itemAdapter;
    private List<Item> itemList;

    // 输入字段：物品名称、类型、规格等
    private EditText etItemName, etItemType, etItemSpecification, etItemQuantity,
            etItemAvailableQuantity, etItemPurchaseTime, etItemPurchasePrice,
            etItemStorageLocation, etItemUseRule, etItemRemark;
    private Button btnAddItem;

    /**
     * 创建 Fragment 的视图层次结构。
     *
     * @param inflater           用于实例化 fragment 中各个 view 的布局解析器
     * @param container          父容器视图组
     * @param savedInstanceState 如果 fragment 正在被重新创建，则该参数为上一次保存的状态，否则为 null
     * @return 返回该 fragment 对应的根视图
     */
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_item_management, container, false);

        initViews(view);
        setupRecyclerView();
        setupEventListeners();

        loadItems(); // 加载物品数据

        return view;
    }

    /**
     * 初始化页面中的所有控件引用，并初始化 itemList 列表。
     *
     * @param view 当前 Fragment 的根视图
     */
    private void initViews(View view) {
        recyclerViewItems = view.findViewById(R.id.recyclerViewItems);
        etItemName = view.findViewById(R.id.etItemName);
        etItemType = view.findViewById(R.id.etItemType);
        etItemSpecification = view.findViewById(R.id.etItemSpecification);
        etItemQuantity = view.findViewById(R.id.etItemQuantity);
        etItemAvailableQuantity = view.findViewById(R.id.etItemAvailableQuantity);
        etItemPurchaseTime = view.findViewById(R.id.etItemPurchaseTime);
        etItemPurchasePrice = view.findViewById(R.id.etItemPurchasePrice);
        etItemStorageLocation = view.findViewById(R.id.etItemStorageLocation);
        etItemUseRule = view.findViewById(R.id.etItemUseRule);
        etItemRemark = view.findViewById(R.id.etItemRemark);
        btnAddItem = view.findViewById(R.id.btnAddItem);

        itemList = new ArrayList<>();
    }

    /**
     * 设置 RecyclerView 的适配器与布局管理器。
     */
    private void setupRecyclerView() {
        itemAdapter = new ItemAdapter(itemList, getContext()); // 传递context参数
        recyclerViewItems.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerViewItems.setAdapter(itemAdapter);
    }

    /**
     * 绑定事件监听器，如按钮点击事件。
     */
    private void setupEventListeners() {
        btnAddItem.setOnClickListener(v -> addNewItem());
    }

    /**
     * 添加一个新的物品条目到数据库及 UI 列表中。
     * 校验输入合法性后构造 Item 实体对象并插入数据库。
     */
    private void addNewItem() {
        String name = etItemName.getText().toString().trim();
        String type = etItemType.getText().toString().trim();
        String specification = etItemSpecification.getText().toString().trim();
        String quantityStr = etItemQuantity.getText().toString().trim();
        String availableQuantityStr = etItemAvailableQuantity.getText().toString().trim();
        String purchaseTime = etItemPurchaseTime.getText().toString().trim();
        String purchasePriceStr = etItemPurchasePrice.getText().toString().trim();
        String storageLocation = etItemStorageLocation.getText().toString().trim();
        String useRule = etItemUseRule.getText().toString().trim();
        String remark = etItemRemark.getText().toString().trim();

        if (name.isEmpty() || quantityStr.isEmpty()) {
            Toast.makeText(getContext(), "请至少填写物品名称和数量", Toast.LENGTH_SHORT).show();
            return;
        }

        int quantity, availableQuantity = 0;
        double purchasePrice = 0.0;

        try {
            quantity = Integer.parseInt(quantityStr);
            if (!availableQuantityStr.isEmpty()) {
                availableQuantity = Integer.parseInt(availableQuantityStr);
            }
            if (!purchasePriceStr.isEmpty()) {
                purchasePrice = Double.parseDouble(purchasePriceStr);
            }
        } catch (NumberFormatException e) {
            Toast.makeText(getContext(), "数量和价格必须为有效数字", Toast.LENGTH_SHORT).show();
            return;
        }

        // 创建新物品对象
        Item newItem = new Item();
        newItem.setItemName(name);
        newItem.setItemType(type.isEmpty() ? "未分类" : type);
        newItem.setSpecification(specification);
        newItem.setQuantity(quantity);
        newItem.setAvailableQuantity(availableQuantityStr.isEmpty() ? quantity : availableQuantity);
        newItem.setStatus(1); // 默认状态为有效
        newItem.setPurchaseTime(purchaseTime);
        newItem.setPurchasePrice(purchasePrice);
        newItem.setTotalValue(purchasePrice * quantity);
        newItem.setManagerId(1); // 实际应用中应根据当前登录用户设置
        newItem.setStorageLocation(storageLocation);
        newItem.setUseRule(useRule);
        newItem.setRemark(remark);
        newItem.setAssociationId(1); // 需要设置正确的社团ID

        // 保存到数据库
        ItemDao itemDao = new ItemDaoImpl(getContext());
        long result = itemDao.addItem(newItem);

        if (result > 0) {
            // 添加到列表并更新UI
            itemList.add(newItem);
            itemAdapter.notifyItemInserted(itemList.size() - 1);

            // 清空输入框
            clearInputFields();

            Toast.makeText(getContext(), "物品添加成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getContext(), "物品添加失败", Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 清除所有输入框的内容。
     */
    private void clearInputFields() {
        etItemName.setText("");
        etItemType.setText("");
        etItemSpecification.setText("");
        etItemQuantity.setText("");
        etItemAvailableQuantity.setText("");
        etItemPurchaseTime.setText("");
        etItemPurchasePrice.setText("");
        etItemStorageLocation.setText("");
        etItemUseRule.setText("");
        etItemRemark.setText("");
    }

    /**
     * 从数据库加载物品数据（目前方法为空实现）。
     * 可在此处补充实际的数据查询逻辑。
     */
    private void loadItems() {
        // 从数据库加载物品数据
        // itemList.clear();
        // itemList.addAll(itemDao.getItemsByAssociationId(associationId));
        // itemAdapter.notifyDataSetChanged();
    }
}

